home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 2002 November / SGI IRIX Base Documentation 2002 November.iso / usr / share / catman / p_man / cat3 / SCSL / psldu.z / psldu
Encoding:
Text File  |  2002-10-03  |  35.2 KB  |  529 lines

  1.  
  2.  
  3.  
  4. PPPPSSSSLLLLDDDDUUUU((((3333SSSS))))                                                            PPPPSSSSLLLLDDDDUUUU((((3333SSSS))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      PPPPSSSSLLLLDDDDUUUU____DDDDeeeessssttttrrrrooooyyyy, PPPPSSSSLLLLDDDDUUUU____EEEExxxxttttrrrraaaaccccttttPPPPeeeerrrrmmmm, PPPPSSSSLLLLDDDDUUUU____FFFFaaaaccccttttoooorrrr, PPPPSSSSLLLLDDDDUUUU____FFFFaaaaccccttttoooorrrrOOOOOOOOCCCC,
  10.      PPPPSSSSLLLLDDDDUUUU____OOOOOOOOCCCCLLLLiiiimmmmiiiitttt, PPPPSSSSLLLLDDDDUUUU____OOOOOOOOCCCCPPPPaaaatttthhhh, PPPPSSSSLLLLDDDDUUUU____OOOOrrrrddddeeeerrrriiiinnnngggg, PPPPSSSSLLLLDDDDUUUU____PPPPrrrreeeepppprrrroooocccceeeessssssss,
  11.      PPPPSSSSLLLLDDDDUUUU____PPPPrrrreeeepppprrrroooocccceeeessssssssZZZZ, PPPPSSSSLLLLDDDDUUUU____SSSSoooollllvvvveeee, PPPPSSSSLLLLDDDDUUUU____SSSSoooollllvvvveeeeMMMM, PPPPSSSSLLLLDDDDUUUU____SSSSttttoooorrrraaaaggggeeee - Parallel
  12.      sparse unsymmetric linear system solver
  13.  
  14. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  15.      Fortran synopsis:
  16.  
  17.           SSSSUUUUBBBBRRRROOOOUUUUTTTTIIIINNNNEEEE PPPPSSSSLLLLDDDDUUUU____DDDDEEEESSSSTTTTRRRROOOOYYYY ((((_t_o_k_e_n))))
  18.           IIIINNNNTTTTEEEEGGGGEEEERRRR _t_o_k_e_n
  19.  
  20.           SSSSUUUUBBBBRRRROOOOUUUUTTTTIIIINNNNEEEE PPPPSSSSLLLLDDDDUUUU____EEEEXXXXTTTTRRRRAAAACCCCTTTTPPPPEEEERRRRMMMM ((((_t_o_k_e_n,,,, _p_e_r_m))))
  21.           IIIINNNNTTTTEEEEGGGGEEEERRRR _t_o_k_e_n,,,, _p_e_r_m(*)
  22.  
  23.           SSSSUUUUBBBBRRRROOOOUUUUTTTTIIIINNNNEEEE PPPPSSSSLLLLDDDDUUUU____FFFFAAAACCCCTTTTOOOORRRR ((((_t_o_k_e_n,,,, _n,,,, _p_o_i_n_t_e_r_s,,,, _i_n_d_i_c_e_s,,,, _v_a_l_u_e_s))))
  24.           IIIINNNNTTTTEEEEGGGGEEEERRRR _t_o_k_e_n,,,, _n,,,, _p_o_i_n_t_e_r_s(*), _i_n_d_i_c_e_s(*)
  25.           DDDDOOOOUUUUBBBBLLLLEEEE PPPPRRRREEEECCCCIIIISSSSIIIIOOOONNNN _v_a_l_u_e_s(*)
  26.  
  27.           SSSSUUUUBBBBRRRROOOOUUUUTTTTIIIINNNNEEEE PPPPSSSSLLLLDDDDUUUU____FFFFAAAACCCCTTTTOOOORRRROOOOOOOOCCCC ((((_t_o_k_e_n,,,, _n,,,, _p_o_i_n_t_e_r_s,,,, _i_n_d_i_c_e_s,,,, _v_a_l_u_e_s))))
  28.           IIIINNNNTTTTEEEEGGGGEEEERRRR _t_o_k_e_n,,,, _n,,,, _p_o_i_n_t_e_r_s(*),,,, _i_n_d_i_c_e_s(*)
  29.           DDDDOOOOUUUUBBBBLLLLEEEE PPPPRRRREEEECCCCIIIISSSSIIIIOOOONNNN _v_a_l_u_e_s(*)
  30.  
  31.           SSSSUUUUBBBBRRRROOOOUUUUTTTTIIIINNNNEEEE PPPPSSSSLLLLDDDDUUUU____OOOOOOOOCCCCLLLLIIIIMMMMIIIITTTT ((((_t_o_k_e_n,,,, _o_o_c_l_i_m_i_t))))
  32.           IIIINNNNTTTTEEEEGGGGEEEERRRR _t_o_k_e_n
  33.           DDDDOOOOUUUUBBBBLLLLEEEE PPPPRRRREEEECCCCIIIISSSSIIIIOOOONNNN _o_o_c_l_i_m_i_t
  34.  
  35.           SSSSUUUUBBBBRRRROOOOUUUUTTTTIIIINNNNEEEE PPPPSSSSLLLLDDDDUUUU____OOOOOOOOCCCCPPPPAAAATTTTHHHH ((((_t_o_k_e_n,,,, _o_o_c_p_a_t_h))))
  36.           IIIINNNNTTTTEEEEGGGGEEEERRRR _t_o_k_e_n
  37.           CCCCHHHHAAAARRRRAAAACCCCTTTTEEEERRRR _o_o_c_p_a_t_h(*)
  38.  
  39.           SSSSUUUUBBBBRRRROOOOUUUUTTTTIIIINNNNEEEE PPPPSSSSLLLLDDDDUUUU____OOOORRRRDDDDEEEERRRRIIIINNNNGGGG ((((_t_o_k_e_n,,,, _m_e_t_h_o_d))))
  40.           IIIINNNNTTTTEEEEGGGGEEEERRRR _t_o_k_e_n,,,, _m_e_t_h_o_d
  41.  
  42.           SSSSUUUUBBBBRRRROOOOUUUUTTTTIIIINNNNEEEE PPPPSSSSLLLLDDDDUUUU____PPPPRRRREEEEPPPPRRRROOOOCCCCEEEESSSSSSSS ((((_t_o_k_e_n,,,, _n,,,, _p_o_i_n_t_e_r_s,,,, _i_n_d_i_c_e_s,,,, _n_o_n__z_e_r_o_s,,,,
  43.           _o_p_s))))
  44.           IIIINNNNTTTTEEEEGGGGEEEERRRR _t_o_k_e_n,,,, _n,,,, _p_o_i_n_t_e_r_s(*),,,, _i_n_d_i_c_e_s(*)
  45.           IIIINNNNTTTTEEEEGGGGEEEERRRR****8888 _n_o_n__z_e_r_o_s
  46.           DDDDOOOOUUUUBBBBLLLLEEEE PPPPRRRREEEECCCCIIIISSSSIIIIOOOONNNN _o_p_s
  47.  
  48.           SSSSUUUUBBBBRRRROOOOUUUUTTTTIIIINNNNEEEE PPPPSSSSLLLLDDDDUUUU____PPPPRRRREEEEPPPPRRRROOOOCCCCEEEESSSSSSSSZZZZ ((((_t_o_k_e_n,,,, _n,,,, _p_o_i_n_t_e_r_s,,,, _i_n_d_i_c_e_s,,,, _m_a_s_k,,,,
  49.           _n_o_n__z_e_r_o_s,,,, _o_p_s))))
  50.           IIIINNNNTTTTEEEEGGGGEEEERRRR _t_o_k_e_n,,,, _n,,,, _p_o_i_n_t_e_r_s(*),,,, _i_n_d_i_c_e_s(*),,,, _m_a_s_k(*)
  51.           IIIINNNNTTTTEEEEGGGGEEEERRRR****8888 _n_o_n__z_e_r_o_s
  52.           DDDDOOOOUUUUBBBBLLLLEEEE PPPPRRRREEEECCCCIIIISSSSIIIIOOOONNNN _o_p_s
  53.  
  54.           SSSSUUUUBBBBRRRROOOOUUUUTTTTIIIINNNNEEEE PPPPSSSSLLLLDDDDUUUU____SSSSOOOOLLLLVVVVEEEE ((((_t_o_k_e_n,,,, _x,,,, _b))))
  55.           IIIINNNNTTTTEEEEGGGGEEEERRRR _t_o_k_e_n
  56.           DDDDOOOOUUUUBBBBLLLLEEEE PPPPRRRREEEECCCCIIIISSSSIIIIOOOONNNN _x(*),,,, _b(*)
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. PPPPSSSSLLLLDDDDUUUU((((3333SSSS))))                                                            PPPPSSSSLLLLDDDDUUUU((((3333SSSS))))
  71.  
  72.  
  73.  
  74.           SSSSUUUUBBBBRRRROOOOUUUUTTTTIIIINNNNEEEE PPPPSSSSLLLLDDDDUUUU____SSSSOOOOLLLLVVVVEEEEMMMM ((((_t_o_k_e_n,,,, _X,,,, _B,,,, _n_r_h_s))))
  75.           IIIINNNNTTTTEEEEGGGGEEEERRRR _t_o_k_e_n,,,, _n_r_h_s
  76.           DDDDOOOOUUUUBBBBLLLLEEEE PPPPRRRREEEECCCCIIIISSSSIIIIOOOONNNN _X(*),,,, _B(*)
  77.  
  78.           DDDDOOOOUUUUBBBBLLLLEEEE PPPPRRRREEEECCCCIIIISSSSIIIIOOOONNNN FFFFUUUUNNNNCCCCTTTTIIIIOOOONNNN PPPPSSSSLLLLDDDDUUUU____SSSSTTTTOOOORRRRAAAAGGGGEEEE((((_t_o_k_e_n))))
  79.           IIIINNNNTTTTEEEEGGGGEEEERRRR _t_o_k_e_n
  80.  
  81.      C/C++ synopsis:
  82.  
  83.           ####iiiinnnncccclllluuuuddddeeee <<<<ssssccccssssllll____ssssppppaaaarrrrsssseeee....hhhh>>>>
  84.  
  85.           vvvvooooiiiidddd PPPPSSSSLLLLDDDDUUUU____DDDDeeeessssttttrrrrooooyyyy ((((iiiinnnntttt _t_o_k_e_n ))));;;;
  86.  
  87.           vvvvooooiiiidddd PPPPSSSSLLLLDDDDUUUU____EEEExxxxttttrrrraaaaccccttttPPPPeeeerrrrmmmm ((((iiiinnnntttt _t_o_k_e_n, iiiinnnntttt _p_e_r_m[[[[]]]] ))));;;;
  88.  
  89.           vvvvooooiiiidddd PPPPSSSSLLLLDDDDUUUU____FFFFaaaaccccttttoooorrrr ((((iiiinnnntttt _t_o_k_e_n, iiiinnnntttt _n, iiiinnnntttt _p_o_i_n_t_e_r_s[[[[]]]], iiiinnnntttt _i_n_d_i_c_e_s[[[[]]]],
  90.           ddddoooouuuubbbblllleeee _v_a_l_u_e_s[[[[]]]] ))));;;;
  91.  
  92.           vvvvooooiiiidddd PPPPSSSSLLLLDDDDUUUU____FFFFaaaaccccttttoooorrrrOOOOOOOOCCCC ((((iiiinnnntttt _t_o_k_e_n, iiiinnnntttt _n, iiiinnnntttt _p_o_i_n_t_e_r_s[[[[]]]], iiiinnnntttt
  93.           _i_n_d_i_c_e_s[[[[]]]], ddddoooouuuubbbblllleeee _v_a_l_u_e_s[[[[]]]] ))));;;;
  94.  
  95.           vvvvooooiiiidddd PPPPSSSSLLLLDDDDUUUU____OOOOOOOOCCCCLLLLiiiimmmmiiiitttt ((((iiiinnnntttt _t_o_k_e_n, ddddoooouuuubbbblllleeee _o_o_c_l_i_m_i_t ))));;;;
  96.  
  97.           vvvvooooiiiidddd PPPPSSSSLLLLDDDDUUUU____OOOOOOOOCCCCPPPPaaaatttthhhh ((((iiiinnnntttt _t_o_k_e_n, cccchhhhaaaarrrr _o_o_c_p_a_t_h[[[[]]]] ))));;;;
  98.  
  99.           vvvvooooiiiidddd PPPPSSSSLLLLDDDDUUUU____OOOOrrrrddddeeeerrrriiiinnnngggg ((((iiiinnnntttt _t_o_k_e_n, iiiinnnntttt _m_e_t_h_o_d ))));;;;
  100.  
  101.           vvvvooooiiiidddd PPPPSSSSLLLLDDDDUUUU____PPPPrrrreeeepppprrrroooocccceeeessssssss ((((iiiinnnntttt _t_o_k_e_n, iiiinnnntttt _n, iiiinnnntttt _p_o_i_n_t_e_r_s[[[[]]]], iiiinnnntttt
  102.           _i_n_d_i_c_e_s[[[[]]]], lllloooonnnngggg lllloooonnnngggg *_n_o_n__z_e_r_o_s, ddddoooouuuubbbblllleeee *_o_p_s ))));;;;
  103.  
  104.           vvvvooooiiiidddd PPPPSSSSLLLLDDDDUUUU____PPPPrrrreeeepppprrrroooocccceeeessssssssZZZZ ((((iiiinnnntttt _t_o_k_e_n, iiiinnnntttt _n, iiiinnnntttt _p_o_i_n_t_e_r_s[[[[]]]], iiiinnnntttt
  105.           _i_n_d_i_c_e_s[[[[]]]], iiiinnnntttt _m_a_s_k[[[[]]]], lllloooonnnngggg lllloooonnnngggg *_n_o_n__z_e_r_o_s, ddddoooouuuubbbblllleeee *_o_p_s ))));;;;
  106.  
  107.           vvvvooooiiiidddd PPPPSSSSLLLLDDDDUUUU____SSSSoooollllvvvveeee ((((iiiinnnntttt _t_o_k_e_n, ddddoooouuuubbbblllleeee _x[[[[]]]], ddddoooouuuubbbblllleeee _b[[[[]]]] ))));;;;
  108.  
  109.           vvvvooooiiiidddd PPPPSSSSLLLLDDDDUUUU____SSSSoooollllvvvveeeeMMMM ((((iiiinnnntttt _t_o_k_e_n, ddddoooouuuubbbblllleeee _X[[[[]]]], ddddoooouuuubbbblllleeee _B[[[[]]]], iiiinnnntttt _n_r_h_s))));;;;
  110.  
  111.           ddddoooouuuubbbblllleeee PPPPSSSSLLLLDDDDUUUU____SSSSttttoooorrrraaaaggggeeee ((((iiiinnnntttt _t_o_k_e_n))));;;;
  112.  
  113. IIIIMMMMPPPPLLLLEEEEMMMMEEEENNNNTTTTAAAATTTTIIIIOOOONNNN
  114.      These routines are part of the SCSL Scientific Library and can be loaded
  115.      using either the ----llllssssccccssss or the ----llllssssccccssss____mmmmpppp option.  The ----llllssssccccssss____mmmmpppp option
  116.      directs the linker to use the multi-processor version of the library.
  117.  
  118.      When linking to SCSL with ----llllssssccccssss or ----llllssssccccssss____mmmmpppp, the default integer size is
  119.      4 bytes (32 bits). Another version of SCSL is available in which integers
  120.      are 8 bytes (64 bits). This version allows the user access to larger
  121.      memory sizes and helps when porting legacy Cray codes.  It can be loaded
  122.      by using the ----llllssssccccssss____iiii8888 option or the ----llllssssccccssss____iiii8888____mmmmpppp option.  A program may
  123.      use only one of the two versions; 4-byte integer and 8-byte integer
  124.      library calls cannot be mixed.
  125.  
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. PPPPSSSSLLLLDDDDUUUU((((3333SSSS))))                                                            PPPPSSSSLLLLDDDDUUUU((((3333SSSS))))
  137.  
  138.  
  139.  
  140.      The C and C++ prototypes shown above are appropriate for the 4-byte
  141.      integer version of SCSL. When using the 8-byte integer version, the
  142.      variables of type iiiinnnntttt become lllloooonnnngggg lllloooonnnngggg and the <<<<ssssccccssssllll____ssssppppaaaarrrrsssseeee____iiii8888....hhhh>>>> header
  143.      file should be included.
  144.  
  145. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  146.      NOTE:  these interfaces are obsolete and will no longer be supported in
  147.      future versions of SCSL.  Please use the routines described in the DDDDPPPPSSSSLLLLDDDDUUUU
  148.      man page instead.  For complex data types, see the ZZZZPPPPSSSSLLLLDDDDUUUU man page.
  149.  
  150.      PPPPSSSSLLLLDDDDUUUU solves sparse unsymmetric linear systems of the form _A_x = _b where _A
  151.      is an _n-by-_n input matrix having symmetric non-zero pattern but
  152.      unsymmetric non-zero values, _b is an input vector of length _n, and _x is
  153.      an unknown vector of length _n.
  154.  
  155.      PPPPSSSSLLLLDDDDUUUU uses a direct method. _A is factored into the following form:
  156.  
  157.           _A = _L _D _U
  158.  
  159.      where _L is a lower triangular matrix with unit diagonal, _D is a diagonal
  160.      matrix, and UUUU is an upper triangular matrix with unit diagonal.
  161.  
  162.      Note that NO PIVOTING FOR STABILITY is performed during factorization.
  163.  
  164.      The PPPPSSSSLLLLDDDDUUUU library contains five main routines.
  165.  
  166.      *   PPPPSSSSLLLLDDDDUUUU____OOOOrrrrddddeeeerrrriiiinnnngggg(((()))) allows the user to select one of five possible
  167.          reordering methods to be used in the matrix preprocessing phase.
  168.  
  169.      *   PPPPSSSSLLLLDDDDUUUU____PPPPrrrreeeepppprrrroooocccceeeessssssss(((()))) performs preprocessing operations on the structure
  170.          of _A (heuristic reordering to reduce fill in _L and UUUU, symbolic
  171.          factorization, etc.).
  172.  
  173.      *   PPPPSSSSLLLLDDDDUUUU____FFFFaaaaccccttttoooorrrr(((()))) factors the matrix _A into _L and _U, using the
  174.          previously computed preprocessing data.
  175.  
  176.      *   PPPPSSSSLLLLDDDDUUUU____SSSSoooollllvvvveeee(((()))) solves for a vector _x, given an input vector _b.
  177.  
  178.      *   PPPPSSSSLLLLDDDDUUUU____DDDDeeeessssttttrrrrooooyyyy(((()))) frees all storage associated with the matrix _A
  179.          (including _L, _D, UUUU, and various data structures computed during
  180.          preprocessing).
  181.  
  182.      The user can call PPPPSSSSLLLLDDDDUUUU____FFFFaaaaccccttttoooorrrr(((()))) several times after a single call to
  183.      PPPPSSSSLLLLDDDDUUUU____PPPPrrrreeeepppprrrroooocccceeeessssssss(((()))) to factor multiple matrices with identical non-zero
  184.      structures but different values.  Similarly, the user can call
  185.      PPPPSSSSLLLLDDDDUUUU____SSSSoooollllvvvveeee(((()))) several times after a single call to PPPPSSSSLLLLDDDDUUUU____FFFFaaaaccccttttoooorrrr(((()))) to
  186.      solve for multiple right-hand-sides.  Also, the user can call
  187.      PPPPSSSSLLLLDDDDUUUU____SSSSoooollllvvvveeeeMMMM(((()))) to solve for multiple right-hand-sides all stored in a
  188.      single array.
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. PPPPSSSSLLLLDDDDUUUU((((3333SSSS))))                                                            PPPPSSSSLLLLDDDDUUUU((((3333SSSS))))
  203.  
  204.  
  205.  
  206.    SSSSppppaaaarrrrsssseeee MMMMaaaattttrrrriiiixxxx FFFFoooorrrrmmmmaaaatttt
  207.      Sparse matrix _A must be input to PPPPSSSSLLLLDDDDUUUU in Harwell-Boeing format (also
  208.      known as Compressed Column Storage format).
  209.  
  210.      The matrix is held in three arrays: _p_o_i_n_t_e_r_s, _i_n_d_i_c_e_s, and _v_a_l_u_e_s.  The
  211.      _i_n_d_i_c_e_s array contains the row indices of the non-zeros in _A. The _v_a_l_u_e_s
  212.      array holds the corresponding non-zero values. The _p_o_i_n_t_e_r_s array
  213.      contains the index in _i_n_d_i_c_e_s for the first non-zero in each column of _A.
  214.      Thus, the row indices for the non-zeros in column _i can be found in
  215.      locations _i_n_d_i_c_e_s[[[[_p_o_i_n_t_e_r_s[[[[_i]]]]]]]] through _i_n_d_i_c_e_s[_p_o_i_n_t_e_r_s[_i+1]-1]. The
  216.      corresponding values can be found in location _v_a_l_u_e_s[_p_o_i_n_t_e_r_s[_i]] through
  217.      _v_a_l_u_e_s[_p_o_i_n_t_e_r_s[_i+1]-1].
  218.  
  219.      PPPPSSSSLLLLDDDDUUUU imposes one constraint on the representation of the _A matrix. The
  220.      non-zeros within each column must appear in order of increasing row
  221.      number.
  222.  
  223.      In the following example, the unsymmetric matrix
  224.  
  225.      1.0 0.0 5.0 0.0
  226.      0.0 3.0 0.0 8.0
  227.      2.0 0.0 7.0 0.0
  228.      0.0 4.0 0.0 9.0
  229.  
  230.  
  231.      would be represented in FORTRAN as follows:
  232.  
  233.       INTEGER pointers(5), indices(8), i
  234.       DOUBLE PRECISION values(8)
  235.       DATA (pointers(i), i = 1, 5) / 1, 3, 5, 7, 9 /
  236.       DATA (indices(i),  i = 1, 8) / 1, 3, 2, 4, 1, 3, 2, 4 /
  237.       DATA (values(i),   i = 1, 8) / 1.0, 2.0, 3.0, 4.0, 5.0,
  238.      &                               7.0, 8.0, 9.0 /
  239.  
  240.  
  241.      Zero-based indexing is used in C, so the pointers, indices, and values
  242.      arrays would contain the following:
  243.  
  244.      int pointers[]  = {0, 2, 4, 6, 8};
  245.      int indices[]   = {0, 2, 1, 3, 0, 2, 1, 3};
  246.      double values[] = {1.0, 2.0, 3.0, 4.0, 5.0, 7.0, 8.0, 9.0};
  247.  
  248.  
  249.    OOOOrrrrddddeeeerrrriiiinnnngggg MMMMeeeetttthhhhooooddddssss
  250.      The PPPPSSSSLLLLDDDDUUUU____OOOOrrrrddddeeeerrrriiiinnnngggg((((_t_o_k_e_n,,,, _m_e_t_h_o_d)))) routine allows the user to change the
  251.      ordering method used to pre-order the matrix before factorization.  This
  252.      routine must be called before calling PPPPSSSSLLLLDDDDUUUU____PPPPrrrreeeepppprrrroooocccceeeessssssss. Five options are
  253.      currently available for the method parameter:
  254.  
  255.      *   Method 0 performs no pre-ordering
  256.  
  257.  
  258.  
  259.  
  260.  
  261.                                                                         PPPPaaaaggggeeee 4444
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268. PPPPSSSSLLLLDDDDUUUU((((3333SSSS))))                                                            PPPPSSSSLLLLDDDDUUUU((((3333SSSS))))
  269.  
  270.  
  271.  
  272.      *   Method 1 performs Approximate Minimum Fill ordering
  273.  
  274.      *   Method 2 performs a single nested dissection ordering (default).
  275.          This method is often called "Extreme matrix ordering".
  276.  
  277.      *   Method 3 performs multiple nested dissection orderings (in parallel)
  278.  
  279.      *   Method 4 performs multiple nested dissection (the same as in Method
  280.          3), but it uses a feedback file to "learn" from the previous solves
  281.          of the same matrix structure and it performs more orderings. The
  282.          multiple nested dissection technique of Methods 3 and 4 is also
  283.          referred to as "Extreme2 matrix ordering".
  284.  
  285.      Method 2 is significantly more expensive than Method 1, but it usually
  286.      produces significantly better orderings.  Method 3 is especially
  287.      effective on multi-processor systems.  It computes OOOOMMMMPPPP____NNNNUUUUMMMM____TTTTHHHHRRRREEEEAAAADDDDSSSS (where
  288.      OOOOMMMMPPPP____NNNNUUUUMMMM____TTTTHHHHRRRREEEEAAAADDDDSSSS is an environment variable indicating the number of
  289.      processors to be used for parallel computation) matrix orderings using
  290.      different starting points for the algorithm and uses the ordering that
  291.      will lead to the fewest floating-point operations to factorize the
  292.      matrix.
  293.  
  294.      Method 4 is useful only when the same non-zero structure is used for
  295.      multiple solves.  Method 4 keeps a record in a "feedback" file of a
  296.      signature for non-zero structures for a maximum of 200 matrices and of
  297.      the starting point that was saved from a previous solve for that
  298.      structure.  In the next Method 4 ordering for that non-zero structure,
  299.      that best starting point and 2222 **** OOOOMMMMPPPP____NNNNUUUUMMMM____TTTTHHHHRRRREEEEAAAADDDDSSSS ---- 1111 new ones generate
  300.      orderings.  The best ordering is used.  In this way, the quality of
  301.      orderings stay the same or improve over time.
  302.  
  303.      Methods 3 and 4 typically take more time for the matrix preprocessing
  304.      than the default.  However, on large systems or on repeated
  305.      factorizations, significant overall speedups (1.1X to 2X) can be obtained
  306.      compared to Method 2.
  307.  
  308.    EEEExxxxttttrrrraaaaccccttttiiiinnnngggg tttthhhheeee ppppeeeerrrrmmmmuuuuttttaaaattttiiiioooonnnn vvvveeeeccccttttoooorrrr
  309.      Unless ordering Method 0 is used, PPPPSSSSLLLLDDDDUUUU applies a symmetric permutation
  310.      to matrix A before the factorization step; the resulting permuted matrix
  311.      generally has significantly less fill-in than the original matrix.  The
  312.      user can obtain the permutation matrix associated with a given token by
  313.      calling PPPPSSSSLLLLDDDDUUUU____EEEExxxxttttrrrraaaaccccttttPPPPeeeerrrrmmmm((((_t_o_k_e_n,,,, _p_e_r_m)))). The permutation is returned as an
  314.      integer array of length _n, with 1111 <<<<==== ppppeeeerrrrmmmm((((iiii)))) <<<<==== nnnn (0000 <<<<==== ppppeeeerrrrmmmm[[[[iiii]]]] <<<< nnnn for C
  315.      code).
  316.  
  317.      A value of _k for _p_e_r_m(_i) implies that node _k in the original ordering is
  318.      node _i in the new ordering.
  319.  
  320.    MMMMaaaattttrrrriiiicccceeeessss wwwwiiiitttthhhh zzzzeeeerrrroooossss oooonnnn tttthhhheeee ddddiiiiaaaaggggoooonnnnaaaallll
  321.      As noted above, no pivoting is done for stability during factorization;
  322.      when zero or near-zero pivots are encountered, PPPPSSSSLLLLDDDDUUUU usually fails. In
  323.      these cases, it may be possible to use PPPPSSSSLLLLDDDDUUUU____PPPPrrrreeeepppprrrroooocccceeeessssssssZZZZ(((()))) to obtain a
  324.  
  325.  
  326.  
  327.                                                                         PPPPaaaaggggeeee 5555
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334. PPPPSSSSLLLLDDDDUUUU((((3333SSSS))))                                                            PPPPSSSSLLLLDDDDUUUU((((3333SSSS))))
  335.  
  336.  
  337.  
  338.      slightly different, but stable, ordering.  The user provides an
  339.      additional integer array, _m_a_s_k, as an argument to PPPPSSSSLLLLDDDDUUUU____PPPPrrrreeeepppprrrroooocccceeeessssssssZZZZ(((()))).
  340.      If _m_a_s_k(_i)====0000, then PPPPSSSSLLLLDDDDUUUU will attempt to maximize the diagonal element
  341.      ||||AAAAiiiiiiii||||.
  342.  
  343.    MMMMeeeemmmmoooorrrryyyy uuuussssaaaaggggeeee
  344.      The returned value of PPPPSSSSLLLLDDDDUUUU____SSSSttttoooorrrraaaaggggeeee(((()))) is an estimate of the amount of
  345.      storage required (in millions of bytes) by the solver's data structures
  346.      for a given matrix system.
  347.  
  348.    OOOOuuuutttt----ooooffff----ccccoooorrrreeee FFFFaaaaccccttttoooorrrriiiizzzzaaaattttiiiioooonnnn
  349.      The storage associated with the factor can be managed in two ways.  The
  350.      PPPPSSSSLLLLDDDDUUUU____FFFFaaaaccccttttoooorrrr(((()))) routine allocates memory for the factor and manages it
  351.      internally, releasing it only when PPPPSSSSLLLLDDDDUUUU____DDDDeeeessssttttrrrrooooyyyy(((()))) is called.  The
  352.      alternative is to do out-of-core factorization by calling
  353.      PPPPSSSSLLLLDDDDUUUU____FFFFaaaaccccttttoooorrrrOOOOOOOOCCCC(((()))). This routine uses a small amount of in-core memory,
  354.      placing the remainder of the factor matrix on disk as it is computed.
  355.      The user can call PPPPSSSSLLLLDDDDUUUU____OOOOOOOOCCCCPPPPaaaatttthhhh(((()))) to indicate the directory in which the
  356.      factor file should be written, and PPPPSSSSLLLLDDDDUUUU____OOOOOOOOCCCCLLLLiiiimmmmiiiitttt(((()))) to indicate how much
  357.      memory to use to hold portions of the factor matrix in-core.  More in-
  358.      core memory generally leads to less disk I/O and higher performance
  359.      during the factorization.  The only required change is to move from in-
  360.      core factorization to out-of-core factorization is the change from
  361.      PPPPSSSSLLLLDDDDUUUU____FFFFaaaaccccttttoooorrrr(((()))) to PPPPSSSSLLLLDDDDUUUU____FFFFaaaaccccttttoooorrrrOOOOOOOOCCCC(((()))).  The other routines (PPPPSSSSLLLLDDDDUUUU____SSSSoooollllvvvveeee(((()))),
  362.      PPPPSSSSLLLLDDDDUUUU____DDDDeeeessssttttrrrrooooyyyy(((()))), etc.) handle out-of-core factors transparently.  Note
  363.      that PPPPSSSSLLLLDDDDUUUU____FFFFaaaaccccttttoooorrrrOOOOOOOOCCCC and subsequent calls to PPPPSSSSLLLLDDDDUUUU____SSSSoooollllvvvveeee are not
  364.      parallelized.
  365.  
  366.    MMMMuuuullllttttiiiipppplllleeee RRRRiiiigggghhhhtttt----HHHHaaaannnndddd----SSSSiiiiddddeeeessss
  367.      PPPPSSSSLLLLDDDDUUUU can solve for large numbers of right-hand-sides with one call to
  368.      PPPPSSSSLLLLDDDDUUUU____SSSSoooollllvvvveeeeMMMM(((()))).  It solves these right hand sides in parallel, with each
  369.      processor solving up to four at a time.
  370.  
  371.    AAAArrrrgggguuuummmmeeeennnnttttssss
  372.      These routines have the following arguments:
  373.  
  374.      _t_o_k_e_n     (input) PPPPSSSSLLLLDDDDUUUU can handle multiple matrices simultaneously. The
  375.                _t_o_k_e_n distinguishes between active matrices.  The _t_o_k_e_n passed
  376.                to PPPPSSSSLLLLDDDDUUUU____FFFFaaaaccccttttoooorrrr(((()))) must match the _t_o_k_e_n used in some previous
  377.                call to PPPPSSSSLLLLDDDDUUUU____PPPPrrrreeeepppprrrroooocccceeeessssssss(((()))).  Similarly, the _t_o_k_e_n passed to
  378.                PPPPSSSSLLLLDDDDUUUU____SSSSoooollllvvvveeee(((()))) must match the _t_o_k_e_n used in some previous call
  379.                to PPPPSSSSLLLLDDDDUUUU____FFFFaaaaccccttttoooorrrr(((()))).  0000 <<<<==== _t_o_k_e_n <<<<==== 11119999....
  380.  
  381.      _m_e_t_h_o_d    (input) An integer specifying the ordering method used during
  382.                preprocessing.  0000 <<<<==== _m_e_t_h_o_d <<<<==== 4444....
  383.  
  384.      _n         (input) The number of rows and columns in the matrix _A.  _n >>>>====
  385.                0000....
  386.  
  387.      _p_o_i_n_t_e_r_s, _i_n_d_i_c_e_s, _v_a_l_u_e_s
  388.                (input) The _p_o_i_n_t_e_r_s and _i_n_d_i_c_e_s arrays store the non-zero
  389.                structure of sparse input matrix _A in Harwell-Boeing or
  390.  
  391.  
  392.  
  393.                                                                         PPPPaaaaggggeeee 6666
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400. PPPPSSSSLLLLDDDDUUUU((((3333SSSS))))                                                            PPPPSSSSLLLLDDDDUUUU((((3333SSSS))))
  401.  
  402.  
  403.  
  404.                Compressed Sparse Column (CSC) format.
  405.  
  406.                The _p_o_i_n_t_e_r_s array stores _n+1 integers, where _p_o_i_n_t_e_r_s[[[[_i]]]] gives
  407.                the index in _i_n_d_i_c_e_s of the first non-zero in column _i of _A.
  408.                The _i_n_d_i_c_e_s array stores the row indices of the non-zeros in _A.
  409.                The _v_a_l_u_e_s array stores the non-zero values in the matrix _A.
  410.  
  411.      _n_o_n__z_e_r_o_s (output) The number of non-zero values in _L and _U.
  412.  
  413.      _o_p_s       (output) The number of floating-point operations required to
  414.                factor _A.
  415.  
  416.      _m_a_s_k      (input) An integer array of length _n used in
  417.                PPPPSSSSLLLLDDDDUUUU____PPPPrrrreeeepppprrrroooocccceeeessssssssZZZZ(((()))).  If _m_a_s_k(_i)====0000, then node _i of matrix A is
  418.                ordered after all of its neighbors in an attempt to avoid a
  419.                zero pivot.
  420.  
  421.      _b         (input) The right-hand-side vector in a PPPPSSSSLLLLDDDDUUUU____SSSSoooollllvvvveeee call.
  422.  
  423.      _x         (output) The solution vector in a PPPPSSSSLLLLDDDDUUUU____SSSSoooollllvvvveeee call.
  424.  
  425.      _n_r_h_s      (input) The number of right-hand side vectors present in a
  426.                PPPPSSSSLLLLDDDDUUUU____SSSSoooollllvvvveeeeMMMM(((()))) call.
  427.  
  428.      _B         (input) The right-hand-side matrix in a PPPPSSSSLLLLDDDDUUUU____SSSSoooollllvvvveeeeMMMM(((()))) call.
  429.                Must be stored in column-major order, and each of the nrhs
  430.                columns must have length _n.
  431.  
  432.      _X         (output) The solution matrix in a PPPPSSSSLLLLDDDDUUUU____SSSSoooollllvvvveeeeMMMM(((()))) call. Must be
  433.                stored in column-major order, and each of the _n_r_h_s columns must
  434.                have length _n.
  435.  
  436.      _o_o_c_p_a_t_h   (input) A character array/string with a path to the directory
  437.                where the temporary out-of-core factor files should be stored.
  438.                If this path is on a striped (or raid-0) file system, the
  439.                performance of the out-of-core solves can be considerably
  440.                improved.  The default path is ////uuuussssrrrr////ttttmmmmpppp.
  441.  
  442.      _o_o_c_l_i_m_i_t  (input) A double precision number indicating the number of
  443.                Mbytes of random access memory that should be used for factor
  444.                storage during a call to PPPPSSSSLLLLDDDDUUUU____FFFFaaaaccccttttoooorrrrOOOOOOOOCCCC. Note that there are
  445.                many other arrays used besides those directly used to store the
  446.                factorization, so total RAM usage by the solve will exceed this
  447.                number.  The default is 64 MB.
  448.  
  449.      _p_e_r_m      (output) An integer array of length _n containing the
  450.                permutation used to reorder matrix A.
  451.  
  452. EEEENNNNVVVVIIIIRRRROOOONNNNMMMMEEEENNNNTTTT VVVVAAAARRRRIIIIAAAABBBBLLLLEEEESSSS
  453.      Two environment variables can affect the operation of ordering methods 3
  454.      and 4.  SSSSPPPPAAAARRRRSSSSEEEE____NNNNUUUUMMMM____OOOORRRRDDDDEEEERRRRSSSS can be used to change the number of orderings
  455.      performed from the default of OOOOMMMMPPPP____NNNNUUUUMMMM____TTTTHHHHRRRREEEEAAAADDDDSSSS for Method 3 and
  456.  
  457.  
  458.  
  459.                                                                         PPPPaaaaggggeeee 7777
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466. PPPPSSSSLLLLDDDDUUUU((((3333SSSS))))                                                            PPPPSSSSLLLLDDDDUUUU((((3333SSSS))))
  467.  
  468.  
  469.  
  470.      (2*OOOOMMMMPPPP____NNNNUUUUMMMM____TTTTHHHHRRRREEEEAAAADDDDSSSS) for Method 4.  SSSSPPPPAAAARRRRSSSSEEEE____FFFFEEEEEEEEDDDDBBBBAAAACCCCKKKK____FFFFIIIILLLLEEEE can be set to the
  471.      path and file name where the feedback information will be kept;
  472.      otherwise, the default feedback file is $$$$HHHHOOOOMMMMEEEE////....ssssppppaaaarrrrsssseeeeFFFFeeeeeeeeddddbbbbaaaacccckkkk.  This file
  473.      will be less than 5K bytes.
  474.  
  475.      The environment variable OOOOMMMMPPPP____NNNNUUUUMMMM____TTTTHHHHRRRREEEEAAAADDDDSSSS determines the number of
  476.      processors that are used for the numerical factorization. The out-of-core
  477.      solve is limited to one processor. Setting the environment variable
  478.      PPPPSSSSLLLLDDDDUUUU____VVVVEEEERRRRBBBBOOOOSSSSEEEE causes PPPPSSSSLLLLDDDDUUUU to output information about the factorization.
  479.  
  480. NNNNOOOOTTTTEEEESSSS
  481.      These routines are optimized and parallelized for the SGI R8000 and
  482.      R1x000 platforms.
  483.  
  484. SSSSEEEEEEEE AAAALLLLSSSSOOOO
  485.      IIIINNNNTTTTRRRROOOO____SSSSCCCCSSSSLLLL(3S), IIIINNNNTTTTRRRROOOO____SSSSOOOOLLLLVVVVEEEERRRRSSSS(3S), DDDDPPPPSSSSLLLLDDDDLLLLTTTT(3S), ZZZZPPPPSSSSLLLLDDDDLLLLTTTT(3S), DDDDPPPPSSSSLLLLDDDDUUUU(3S),
  486.      ZZZZPPPPSSSSLLLLDDDDUUUU(3S)
  487.  
  488.  
  489.  
  490.  
  491.  
  492.  
  493.  
  494.  
  495.  
  496.  
  497.  
  498.  
  499.  
  500.  
  501.  
  502.  
  503.  
  504.  
  505.  
  506.  
  507.  
  508.  
  509.  
  510.  
  511.  
  512.  
  513.  
  514.  
  515.  
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.                                                                         PPPPaaaaggggeeee 8888
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.